home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib05.dsk / SHAPE COMBINER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  4KB  |  113 lines

  1. 1000 :
  2. 1010  REM  SHAPE COMBINE
  3. 1020  REM  NOVEMBER 18, 1980
  4. 1030  REM  CHRIS CARROLL
  5. 1040 :
  6. 1050  GOSUB 3000: REM  INIT VARS
  7. 1060  GOTO 5000
  8. 1070 :
  9. 1080 "  COMBINE SEVERAL TABLES
  10. 1090 "  FROM DISK INTO ONE
  11. 1100 :
  12. 1110 :
  13. 1120 :
  14. 1130  REM  INPUT NAMES OF SHAPES
  15. 1140  REM  TO BE COMBINED.
  16. 1150 :
  17. 1160  HOME : INVERSE : PRINT "FIND TABLES TO COMBINE, ENTER Q TO QUIT";: NORMAL : POKE 34,2: HOME : PRINT 
  18. 1170  PRINT D$"CATALOG"
  19. 1180  PRINT : PRINT "NAME OF SHAPE #"NUM +1;: INPUT " ?";A$: IF A$ = ""  THEN 1180
  20. 1190  IF A$ = "Q"  THEN 1240
  21. 1200  PRINT D$"VERIFY "A$:A$(NUM) = A$:NUM = NUM +1: GOTO 1170
  22. 1210 :
  23. 1220 "  COMBINE REQUESTED TABLES
  24. 1230 :
  25. 1240  TEXT : HOME : VTAB 4: PRINT " <PLEASE WAIT WHILE TABLE IS COMPILED>"
  26. 1250  POKE MEM,NUM:MEM = MEM +1: POKE MEM,0
  27. 1260 MEM = (NUM +1) *2 +MS
  28. 1270  FOR I = 1 TO NUM
  29. 1280  POKE I *2 +MS,((MEM -MS)/256 - INT((MEM -MS)/256)) *256: POKE I *2 +MS +1, INT((MEM -MS)/256)
  30. 1290  PRINT D$"BLOAD "A$(I -1)",A"MEM
  31. 1300 X =  PEEK(MEM):SL = X *2 +2
  32. 1310  FOR K = MEM TO MEM +SL: POKE K, PEEK(K +SL): NEXT :MEM = MEM +SL +1
  33. 1320  IF  PEEK(MEM) = 0  THEN 1340
  34. 1330  POKE MEM, PEEK(MEM +SL):MEM = MEM +1: GOTO 1320
  35. 1340  NEXT : GOSUB 4050: REM  DISPLAY SHAPES, SAVE TO DISK
  36. 1350  END 
  37. 1360 :
  38. 1370 "  END OF COMBINE TABLE
  39. 1380 "  SECTION.
  40. 1390 :
  41. 2000 :
  42. 2010  REM  ERROR CONTROL
  43. 2020 :
  44. 2030 Y =  PEEK(222): IF Y = 6  THEN  PRINT : PRINT G$"FILE NOT FOUND.PLEASE RE-ENTER THE NAME.": FOR K = 1 TO 2000: NEXT : ON A GOTO 1170,6070
  45. 2040  IF Y = 8  THEN  PRINT : PRINT G$"I/O ERROR. ABORT";: INPUT " ?";A$: IF  LEFT$(A$,1) < >"Y"  THEN  ON A GOTO 1170,6070
  46. 2050  IF Y = 8  THEN  TEXT : HOME : END 
  47. 2060  IF Y = 11  THEN  PRINT : PRINT G$"SYNTAX ERROR. PLEASE INPUT AGAIN": ON A GOTO 1170,6070
  48. 2070  IF Y = 10  THEN  PRINT : PRINT G$"DISK FULL.PLEASE INSERT ANOTHER": INPUT "HIT RETURN WHEN NEW DISK IS READY";A$: GOTO 4090
  49. 2080  IF Y = 13  THEN  PRINT : PRINT G$"FILE TYPE MISMATCH. PLEASE ENTER CORRECT": PRINT "NAME FOR "A$(I -1);: INPUT " ?";A$(I -1): PRINT : ON A GOTO 1290,6090
  50. 2090  PRINT G$"ERROR NUMBER "Y: STOP 
  51. 3000  GOTO 3040
  52. 3010 :
  53. 3020 "  INITIALIZE VARIABLES
  54. 3030 :
  55. 3040 D$ =  CHR$(4):G$ =  CHR$(7): TEXT : HOME :MS = 16384:MEM = MS:MB = 768: SCALE= 1: ROT= 0: DIM A$(40): ONERR  GOTO 2000
  56. 3050 PLO = ((MS/256) - INT(MS/256)) *256:PHI =  INT(MS/256)
  57. 3060  POKE 232,PLO: POKE 233,PHI
  58. 3070  RETURN 
  59. 4000 :
  60. 4010  REM  DISPLAY SHAPES ON
  61. 4020  REM  SCREEN, SAVE TO
  62. 4030  REM  DISK IF APPROVED.
  63. 4040 :
  64. 4050  HGR : HCOLOR= 3:J = 0:Y = 20:X = 28: FOR R = 1 TO I -1: DRAW R AT X,Y:J = J +1:X = X +28: IF J >8  THEN Y = Y +40:X = 28:J = 0
  65. 4060  NEXT 
  66. 4070  HOME : VTAB 22: PRINT "SHAPE ENTERED FROM "MS" TO "MEM: PRINT 
  67. 4080  PRINT "SAVE TO DISK ?";: GET A$: IF A$ = "N"  THEN  TEXT : HOME : RETURN 
  68. 4090  HOME : VTAB 22: INPUT "WHAT NAME TO USE ?";A$: IF  LEN(A$) = 0  THEN  PRINT G$: GOTO 4090
  69. 4100  TEXT : HOME : PRINT D$"BSAVE "A$",A"MS",L"(MEM +1) -MS
  70. 4110  PRINT D$"OPEN "A$" FILE": PRINT D$"WRITE "A$" FILE"
  71. 4120  PRINT "BLOAD "A$
  72. 4130  PRINT "POKE 232,"PLO":POKE 233,"PHI
  73. 4140  PRINT "SCALE=1:ROT=0"
  74. 4150  PRINT D$"CLOSE"
  75. 4160  RETURN 
  76. 5000 :
  77. 5010  REM  CHOOSE WHERE TO GO
  78. 5020 :
  79. 5040  TEXT : HOME : VTAB 4: PRINT "CHOICES-": PRINT : PRINT 
  80. 5050  PRINT  TAB( 5)"(1) COMBINE SINGLE-SHAPE TABLES"
  81. 5060  PRINT 
  82. 5070  PRINT  TAB( 5)"(2) BREAK LARGE TABLE UP"
  83. 5080  PRINT 
  84. 5100  PRINT : INPUT "YOUR CHOICE ?";A$:A =  VAL(A$): IF A <1  OR A >2  THEN 5100
  85. 5110  ON A GOTO 1130,6000
  86. 6000 :
  87. 6010  REM  CONVERT LARGE SHAPE
  88. 6020  REM  TABLE INTO SMALL
  89. 6030  REM  SHAPE TABLES
  90. 6040 :
  91. 6050  POKE 232,((MB/256) - INT(MB/256)) *256: POKE 233, INT(MB/256): REM  POKE IN BEGINNING ADDRESS OF SHAPE TABLE
  92. 6060  HOME : PRINT "FIND TABLE TO BREAK UP.": POKE 34,2: HOME : PRINT 
  93. 6070  PRINT D$"CATALOG":I = 1
  94. 6080  INPUT "NAME OF SHAPE TO SPLIT?";A$(0)
  95. 6090  PRINT D$"BLOAD "A$(0)",A"MS
  96. 6100 NUM =  PEEK(MS): FOR J = 0 TO 3: READ K: POKE MB +J,K: NEXT : REM  POKE IN BEGINNING OF SHAPE TABLE
  97. 6110 :
  98. 6120  REM  NUM=NUMBER OF SHAPES
  99. 6130  REM  IN TABLE. FOR EACH
  100. 6140  REM  TABLE, MOVE IT TO M2.
  101. 6150 :
  102. 6160  FOR J = 1 TO NUM:ML = MB +4
  103. 6170 MEM =  PEEK(J *2 +MS) + PEEK(J *2 +1 +MS) *256 +MS
  104. 6180  POKE ML, PEEK(MEM): IF  PEEK(MEM) = 0  THEN 6200
  105. 6190 MEM = MEM +1:ML = ML +1: GOTO 6180
  106. 6200 SL = MS:R = MEM:MS = MB:MEM = ML: HGR : HCOLOR= 3: DRAW 1 AT 139,79: GOSUB 4070: REM  SAVE SINGLE SHAPE TO DISK
  107. 6210 MEM = R:MS = SL
  108. 6220  NEXT : END 
  109. 7000 :
  110. 7010  REM  DATA FOR SINGLE
  111. 7020  REM  SHAPE TABLE.
  112. 7030 :
  113. 7040  DATA  1,0,4,0